// ModelList数据解析测试脚本
import axios from 'axios';

console.log('🔍 开始测试ModelList数据解析功能...');

// 测试配置
const API_BASE_URL = 'http://localhost:4112';

// 创建axios实例
const apiClient = axios.create({
  baseURL: API_BASE_URL,
  timeout: 10000,
  headers: {
    'Content-Type': 'application/json',
  }
});

// 测试不同的API端点
async function testModelListAPI() {
  console.log('\n📋 测试模型列表API...');
  
  try {
    // 测试基本的模型列表接口
    const response = await apiClient.get('/model/list', {
      params: {
        search: '',
        occ: 'bladePoint'
      }
    });
    
    console.log('✅ API响应成功');
    console.log('状态码:', response.data.code);
    console.log('消息:', response.data.msg || '无');
    
    if (response.data.data) {
      if (Array.isArray(response.data.data)) {
        console.log('✅ 数据类型: 数组');
        console.log('数组长度:', response.data.data.length);
        
        if (response.data.data.length > 0) {
          const firstItem = response.data.data[0];
          console.log('第一个元素字段:', Object.keys(firstItem));
          console.log('第一个元素数据:', firstItem);
          
          // 检查关键字段是否存在（支持大小写字段名）
          const requiredFields = ['MId', 'MName', 'MImg', 'MUrl', 'mId', 'mName', 'mImg', 'mUrl'];
          const missingFields = requiredFields.filter(field => !(field in firstItem));
          
          // 检查是否有至少一组完整的字段（大写或小写）
          const hasUpperCaseFields = ['MId', 'MName', 'MImg', 'MUrl'].every(field => field in firstItem);
          const hasLowerCaseFields = ['mId', 'mName', 'mImg', 'mUrl'].every(field => field in firstItem);
          
          if (hasUpperCaseFields) {
            console.log('✅ 检测到大写字段格式（后端格式）');
          } else if (hasLowerCaseFields) {
            console.log('✅ 检测到小写字段格式（前端格式）');
          } else {
            console.log('❌ 字段格式不完整');
          }
          
          if (missingFields.length === 0) {
            console.log('✅ 所有必需字段都存在');
          } else {
            console.log('❌ 缺少字段:', missingFields);
          }
        } else {
          console.log('⚠️ 数组为空，没有数据');
        }
      } else if (typeof response.data.data === 'object') {
        console.log('✅ 数据类型: 对象');
        console.log('对象字段:', Object.keys(response.data.data));
        console.log('对象数据:', response.data.data);
      } else {
        console.log('⚠️ 数据类型:', typeof response.data.data);
        console.log('数据值:', response.data.data);
      }
    } else {
      console.log('⚠️ 数据为null或undefined');
    }
    
  } catch (error) {
    if (error.code === 'ECONNREFUSED') {
      console.log('❌ 后端服务未启动，请先启动后端服务');
    } else if (error.response) {
      console.log('❌ API错误响应');
      console.log('状态码:', error.response.status);
      console.log('错误数据:', error.response.data);
    } else {
      console.log('❌ 网络错误或其他异常');
      console.log('错误信息:', error.message);
    }
  }
}

// 测试职业筛选
async function testOccupationFilter() {
  console.log('\n📋 测试职业筛选功能...');
  
  const occupations = ['bladePoint', 'flame', 'doubleGun', 'sniper'];
  
  for (const occupation of occupations) {
    try {
      console.log(`测试职业: ${occupation}`);
      
      const response = await apiClient.get('/model/list', {
        params: {
          search: '',
          occ: occupation
        }
      });
      
      if (response.data.code === 200) {
        const data = response.data.data;
        if (Array.isArray(data)) {
          console.log(`✅ ${occupation}: 返回 ${data.length} 个模型`);
        } else {
          console.log(`⚠️ ${occupation}: 返回非数组数据`);
        }
      } else {
        console.log(`❌ ${occupation}: API返回错误 - ${response.data.msg}`);
      }
    } catch (error) {
      console.log(`❌ ${occupation}: 请求失败 - ${error.message}`);
    }
  }
}

// 测试搜索功能
async function testSearchFunction() {
  console.log('\n📋 测试搜索功能...');
  
  const searchTerms = ['刀锋', 'blade', 'test'];
  
  for (const term of searchTerms) {
    try {
      console.log(`搜索关键词: ${term}`);
      
      const response = await apiClient.get('/model/list', {
        params: {
          search: term,
          occ: ''
        }
      });
      
      if (response.data.code === 200) {
        const data = response.data.data;
        if (Array.isArray(data)) {
          console.log(`✅ "${term}": 返回 ${data.length} 个结果`);
        } else {
          console.log(`⚠️ "${term}": 返回非数组数据`);
        }
      } else {
        console.log(`❌ "${term}": API返回错误 - ${response.data.msg}`);
      }
    } catch (error) {
      console.log(`❌ "${term}": 请求失败 - ${error.message}`);
    }
  }
}

// 运行所有测试
async function runAllTests() {
  console.log('='.repeat(60));
  console.log('   ModelList数据解析功能测试');
  console.log('='.repeat(60));
  
  await testModelListAPI();
  await testOccupationFilter();
  await testSearchFunction();
  
  console.log('\n' + '='.repeat(60));
  console.log('   测试完成');
  console.log('='.repeat(60));
}

// 运行测试
runAllTests().catch(console.error);
